﻿//一个数组中只有两个数字是出现一次，其他所有数字都出现了两次。
//编写一个函数找出这两个只出现一次的数字。
//例如：
//有数组的元素是：1，2，3，4，5，1，2，3，4，6

//只有5和6只出现1次，要找出5和6.
#include <stdio.h>
void find_single_dog(int arr[], int n , int* sd1, int* sd2)
{
	int ret = 0;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		ret ^= arr[i];
	}//找到两个数互异的结果
	
	int pos = 0;
	for (i = 0; i < 32; i++)
	{
		if ((ret >> i) & 1)
		{
			pos = i;
			break;
		}//计算ret的二进制位哪一位是1,即有分歧的一位
	}

	for (i = 0; i < 10; i++)
	{
		if ((arr[i] >> pos) & 1)
		{
			*sd1 ^= arr[i];//该位为1
		}
		else
		{
			*sd2 ^= arr[i];//该位为0
		}
	}


}
int main()
{
	int arr[10] = { 1, 2, 3, 4, 5, 1, 2, 3, 4, 6 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int x = 0;
	int y = 0;
	find_single_dog(arr, sz, &x, &y );
	printf("%d\n%d", x, y);
	return 0;
}